gusucode.com > LTE基带收发仿真系统matlab源码程序 > LTE baseband simulation/channel.m

    function [recSymb Hcell] = channel(sendSymbAll,Hcell,h,SNRdB)
% 功能:发端数据经过信道,到达接收端,并添加噪声
% 输入:
%      sendSymbAll:发端发送信号
%            Hcell:频域信道响应
%                h:时域信道响应
%            SNRdB:信噪比[dB]
% 输出:
%          recSymb:接收端收到的符号
%
%  Author:		程式小组(徐萌 张妙 张晓庆)
%  Date:		2010-07-11
%  ==========================================================
global LTE_par

channelFreq = LTE_par.channelFreq; % 频域信道指示 true:频域信道 false:时域信道
addNoise = LTE_par.addNoise;       % 噪声添加指示 ture:添加噪声 false:无噪声
FFT_SIZE = LTE_par.FFT_SIZE;       % FFT变换点数
CP = LTE_par.CP;                   % 1个子帧内循环前缀长度
nOfdm = length(CP);                % OFDM符号数
nTx = LTE_par.BS_par.nAnt;         % BS天线数
nRx = LTE_par.UE_par.nAnt;         % UE天线数

if channelFreq == true
    
    recSymb = zeros(nRx,FFT_SIZE,nOfdm);
    for k = 1:FFT_SIZE        
        % 经过信道
        for n = 1:nOfdm
            recSymb(:,k,n) = Hcell{k}*sendSymbAll(:,k,n);
        end
    end
    

    
else
    % 时域信道
    recSymb = zeros(nRx,(FFT_SIZE*nOfdm+sum(CP)));
    maxDelay = size(h,3);
    for iRx = 1:nRx
        for iTx = 1:nTx
            htemp = reshape(h(iRx,iTx,:),1,maxDelay); % filter函数要求输入的前两个参数维数不超过2
            recSymb(iRx,:) = recSymb(iRx,:)+filter(htemp,1,sendSymbAll(iTx,:));
        end
    end
end

% 添加噪声
if addNoise == true

    normNoise = 1/sqrt(2)*(randn(size(recSymb))+1i*randn(size(recSymb)));
    if channelFreq == true
        recSymb = recSymb+1/sqrt(10^(0.1*SNRdB))*normNoise;
    else
        recSymb = recSymb+1/sqrt(FFT_SIZE*10^(0.1*SNRdB))*normNoise; % OFDM调制导致的功率降低
    end
end